package java_thinking.unit_13._13_1;

import java.util.ArrayList;
import java.util.List;

/**
 * @Description : 使用toString()方法打印出对象的
 * @author: cww
 * @DateTime: 2019-03-24 19:57
 */

public class InfiniteRecursion {
    @Override
    public String toString(){
        /**
         * 在这里使用this会抛出：java.lang.StackOverflowError 异常
         * 因为这里发生了自动类型转换，编译器识别到String后面跟着“+”而“+”后面对象不是String
         * 于是编译器试着将this转换成一个String，转换方法就是调用this上的toString()，于是就发生了
         * 递归调用InfiniteRecursion.toString().最后导致内存溢出，如果的确要打印出内存地址，则
         * 使用Object.toString()
         */
//        return "InfiniteRecursion address: "+this+"\n";

        return "InfiniteRecursion address: " + super.toString()+"\n";
    }

    public static void main(String[] args) {
        List<InfiniteRecursion> recursionList = new ArrayList<>();
        for (int i =0;i<10;i++){
            recursionList.add(new InfiniteRecursion());
        }
        System.out.println(recursionList);

    }
}
